package algoritmi;

import dxf.DXFPoint;
import dxf.entities.Circle;

/**
 * Il tipo di dato Algoritmo, descritto dall'interfaccia <code>Algoritmo</code>, rappresenta i vari 
 * tipi di algoritmi per la disposizione delle canne di un registro all'interno di una coperta. 
 * 
 * Le operazioni fornite permettono di recuperare diverse informazioni (centri delle canne, canne, variabile di correttezza dell'algoritmo).
 * 
 * @author Andrea Zonca
 * @author Michele Brignoli
 * @version 2.0
 */
public interface Algoritmo {

	//METODI ACCESSORI
	/**
	 * Restituisce il vettore di <code>DXFPoint</code> contenente i centri delle canne.
	 * 
	 * @return il vettore contenente i centri delle canne.
	 */
	public DXFPoint[] getCentri();
	
	/**
	 * Restituisce il vettore di cerchi che rappresenta le canne. 
	 * 
	 * @return il vettore che rappresenta le canne.
	 */
	public Circle[] getCircles();
	
	/**
	 * Restituisce la variabile che indica se l'algoritmo termina in modo corretto, riuscendo a inserire 
	 * le canne nella coperta. In questo caso il metodo restituisce <code>true</code>. 
	 * 
	 * @return il booleano che indica se l'algoritmo termina in modo corretto. 
	 */
	public boolean checkCorretto();
	
	/**
	 * Permette di modificare i centri delle canne.
	 * 
	 * @param c il nuovo centro della canna.
	 * @param i l'indice della canna di cui si vuole modificare il centro.
	 * 
	 * */
	public void setCentro(DXFPoint c, int i);
	
	/**
	 * Restituisce il <code>DXFPoint</code> che rappresenta il centro della canna specificata come parametro.
	 * 
	 * @param i l'indice della canna di cui si vuole restituire il centro
	 * @return il punto che rappresenta il centro della canna.
	 */
	public DXFPoint getCentro(int i);

}
